#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
主题:排序不支持原生比较的对象
问题: 你想排序类型相同的对象，但是他们不支持原生的比较操作。
提示 : 
    1. 选择使用 lambda 函数或者是 attrgetter() 可能取决于个人喜好。 但是， attrgetter() 函数通常会运行的快点，并且还能同时允许多个字段进行比较
"""
from operator import attrgetter

class User:
    def __init__(self, user_id) -> None:
        self.user_id = user_id

    def __repr__(self) -> str:
        return 'User({})'.format(self.user_id)

users = [User(23), User(3), User(99)]

def recipe1():
    """使用lambda"""
    by_user_id = sorted(users, key = lambda u: u.user_id)
    print(f"{by_user_id = }")

def recipe2():
    """使用 operator.attrgetter()"""  
    by_user_id = sorted(users, key = attrgetter('user_id'))
    print(f"{by_user_id = }")  

def recipe3():
    """min() 和 max()"""
    min_user = min(users, key = attrgetter('user_id'))
    max_user = max(users, key = attrgetter('user_id'))
    print(f"{min_user = }")
    print(f"{max_user = }")

def main():
    print('recipe1'.center(20, '*'))
    recipe1()
    print('recipe2'.center(20, '*'))
    recipe2()
    print('recipe3'.center(20, '*'))
    recipe3()    

if __name__ == '__main__':
    main()
